如何使用它以及它如何在强制转换(从有符号到无符号,反之亦然)、按位运算和位移运算等操作期间影响数字.
我希望的是 一个清晰简洁的定义 ,程序员很容易理解。
二进制补码是一种存储整数的巧妙方法,因此常见的数学问题很容易实现。
要理解,您必须考虑二进制中的数字。
它基本上说,
让我们用一个 4 位的 mini-byte 来试试(我们称它为nibble - 1/2 a byte)。
0000
0001
0010
0011
0100
0111
这就是我们所能达到的积极程度。2 3 -1 = 7。
对于底片:
1111
1110
1101
1100
1000
请注意,对于负数 ( 1000= -8),您会得到一个额外的值,而对于正数则不会。这是因为0000用于零。这可以被认为是计算机的数线。
区分正数和负数
这样做,第一位获得“符号”位的作用,因为它可以用来区分非负和负十进制值。如果最高有效位是1,那么二进制可以说是负数,如果最高有效位(最左边)是0,您可以说十进制值是非负数。
1
0
“符号幅度”负数只是将其正数对应的符号位翻转,但这种方法必须处理将1000(一个1后跟所有0s)解释为“负零”,这是令人困惑的。
“一个的补码”负数只是其正数的位补码,这也导致与1111(全为)混淆的“负零”。
除非您在非常靠近硬件的地方工作,否则您可能不必处理 Ones’ Complement 或 Sign-Magnitude 整数表示。